# 切换到 root 用户（必须 root 权限）
sudo -i

# 创建一键配置脚本
cat > /root/auto_reboot.sh << 'SCRIPT_END'
#!/bin/bash
set -euo pipefail  # 脚本执行出错时立即退出，避免后续无效操作

# 切换到脚本所在目录（关键！确保日志/标记文件和脚本在同一目录）
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
cd "$SCRIPT_DIR"

# 颜色输出函数（增强可读性）
green() { echo -e "\033[32m$1\033[0m"; }
red() { echo -e "\033[31m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }

# 检查是否为 root 用户（必须 root 权限执行）
if [ "$(id -u)" -ne 0 ]; then
    red "错误：请使用 root 用户执行（执行 sudo -i 切换 root 后再运行）"
    exit 1
fi

green "========================================"
green "开始配置：卸载硬盘+定时重启+自动挂载"
green "========================================"

# 一、创建 "卸载硬盘 + 重启" 脚本
green "\n1. 创建重启卸载脚本 /root/reboot_with_umount.sh..."
cat > /root/reboot_with_umount.sh << 'EOF'
#!/bin/bash
# 定义失败标记文件
FAIL_FLAG="/root/umount_failed.flag"
# 日志文件路径
LOG_FILE="/root/reboot_log.log"
ERROR_FILE="/root/reboot_error.log"

# 清理30天前的日志（保留最近30天）
find "$LOG_FILE" -mtime +30 -delete 2>/dev/null
find "$ERROR_FILE" -mtime +30 -delete 2>/dev/null

# 卸载移动硬盘（忽略卸载失败的错误）
umount /mnt/sda1 2>/dev/null

# 验证卸载结果
if ! mount | grep -q "/mnt/sda1"; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 移动硬盘已成功卸载，开始重启..." >> "$LOG_FILE"
    rm -f "$FAIL_FLAG"
    /sbin/reboot
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 移动硬盘卸载失败，取消重启！" >> "$ERROR_FILE"
    touch "$FAIL_FLAG"
fi
EOF

# 二、给脚本添加执行权限
green "2. 给脚本添加执行权限..."
chmod +x /root/reboot_with_umount.sh

# 三、配置 crontab 定时任务（避免重复添加）
green "3. 配置定时任务（每天3点执行，4点重试）..."
CRON_TASK_1="0 3 * * * /root/reboot_with_umount.sh"
CRON_TASK_2="0 4 * * * [ -f /root/umount_failed.flag ] && /root/reboot_with_umount.sh"

# 检查定时任务是否已存在，不存在则添加
if ! crontab -l 2>/dev/null | grep -qF "$CRON_TASK_1"; then
    (crontab -l 2>/dev/null; echo "$CRON_TASK_1") | crontab -
fi
if ! crontab -l 2>/dev/null | grep -qF "$CRON_TASK_2"; then
    (crontab -l 2>/dev/null; echo "$CRON_TASK_2") | crontab -
fi

# 四、配置 /etc/fstab 自动挂载（避免重复添加）
green "4. 配置重启后自动挂载移动硬盘..."
FSTAB_LINE="/dev/sda1  /mnt/sda1  ext4  defaults  0  2"
MOUNT_DIR="/mnt/sda1"

# 创建挂载目录（若不存在）
if [ ! -d "$MOUNT_DIR" ]; then
    mkdir -p "$MOUNT_DIR"
    green "  - 已创建挂载目录 $MOUNT_DIR"
fi

# 检查 fstab 中是否已存在该配置，不存在则添加
if ! grep -qF "$FSTAB_LINE" /etc/fstab; then
    echo "$FSTAB_LINE" >> /etc/fstab
    green "  - 已添加自动挂载配置到 /etc/fstab"
else
    yellow "  - /etc/fstab 中已存在该挂载配置，跳过重复添加"
fi

# 测试 fstab 配置是否生效
green "5. 测试自动挂载配置是否正确..."
if mount -a >/dev/null 2>&1; then
    green "  - 挂载配置测试成功！重启后会自动挂载 /dev/sda1 到 $MOUNT_DIR"
else
    red "  - 挂载配置测试失败！请检查 /dev/sda1 设备和文件系统是否正确（当前配置为 ext4）"
    # 移除错误的 fstab 配置，避免影响系统启动
    sed -i "\|$FSTAB_LINE|d" /etc/fstab
    exit 1
fi

# 六、验证配置结果
green "\n========================================"
green "配置完成！以下是关键配置验证："
green "========================================"

green "\n[脚本内容验证]:"
cat /root/reboot_with_umount.sh | grep -E "^#|umount|reboot|LOG_FILE|ERROR_FILE" | head -10
yellow "（完整脚本路径：/root/reboot_with_umount.sh）"

green "\n[定时任务验证]:"
crontab -l | grep -E "3.*reboot_with_umount|4.*umount_failed.flag"

green "\n[自动挂载验证]:"
tail -1 /etc/fstab

green "\n[日志文件说明]:"
green "  - 成功日志：/root/reboot_log.log（卸载成功+重启记录）"
green "  - 失败日志：/root/reboot_error.log（卸载失败记录）"
green "  - 日志自动清理：保留最近30天，旧日志会自动删除"

green "\n========================================"
yellow "注意事项："
yellow "1. 脚本仅针对 /dev/sda1 设备（移动硬盘），若你的硬盘设备名不是 sda1，请修改脚本中的 /dev/sda1"
yellow "2. 若硬盘文件系统不是 ext4（如 xfs、ntfs），请修改 /etc/fstab 中的 ext4 为对应文件系统类型"
yellow "3. 定时任务：每天凌晨3点执行，失败则4点重试一次"
green "========================================"
SCRIPT_END